package com.hui.dao;


import com.hui.bean.RoomBean;
import org.apache.ibatis.annotations.Param;

import java.sql.SQLException;
import java.util.List;

/**
 * 房间相关dao层操作
 *
 */
public interface IRoomDao {

    /**
     * 查询所有的房间
     * @return
     */
    List<RoomBean> getAllRooms() throws SQLException;

    /**
     * 根据房间的类型查询相关的房间
     *      男生寝室/女生寝室
     * @param roomType 房间类型
     * @return 发牛相对于的房间信息
     */
    List<RoomBean> getRoomsByRoomType(String roomType);

    /**
     *
     * 通过条件查询相关
     * @param roomAddress 房间地址
     * @param roomStatus 房间状态 正常/损坏
     * @param availableLive 是否可住 (是否满员)  0：房间满员  1：房间人数未满
     * @param roomType  房间类型 男寝室/女寝室
     * @return 返回装有相关条件的房间对象的list集合
     */
    List<RoomBean> findRoomsByCondition(@Param("roomAddress") String roomAddress,
                                        @Param("roomStatus") String roomStatus,
                                        @Param("availableLive") String availableLive,
                                        @Param("roomType") String roomType) throws SQLException;



    /**
     * 添加一个房间
     * @param roomBean  带数据的房间信息对象
     * @return 受影响行数
     */
    int saveRoom(RoomBean roomBean) throws SQLException;


    /**
     * 删除一个房间
     * 如果这个房间还有人住，直接返回0
     * 如果没有人住，直接删除该房间并返1
     * @param roomId
     * @return 受影响行数
     */
    int deleteRoomByRoomId(@Param("roomId") int roomId) throws SQLException;

    /**
     * 通过房间id得到当前房间的信息实体对象
     * @param roomId  房间id
     * @return 对应的房间信息对象
     */
    RoomBean getRoomByRoomId(int roomId) throws SQLException;

    /**
     * 通过性别查询可住的房间
     *      意思是：f_capnum!=f_innum  不相等就可以住人，相等了就不能住人了
     * @param gender  性别
     * @return 返回可住的房间
     */
    List<RoomBean> getAvailableRooms(String gender) throws SQLException;

    /**
     * 通过性别得到可以更换的房间
     * @param gender  性别
     * @return 返回可以更换的房间的list集合
     */
    List<RoomBean> getChangeableRooms(String gender);

    /**
     * 通过房间的地址得到当前房间的对象
     * @param roomAddress
     * @return
     * @throws SQLException
     */
    RoomBean getRoomByRoomAddress(String roomAddress) throws SQLException;

    /**
     * 通过房间的id移除掉一个学生
     * @param roomId
     * @return
     */
    int removeStudentFromRoomByRoomId(int roomId) throws SQLException;

    int addStudentInRoomByRoomId(int roomId) throws SQLException;

    /**
     * 更新房间的状态到设备损坏
     * @param roomId 房间id
     * @return 是否更新成功
     */
    int updateRoomStatusToError(int roomId) throws SQLException;

    /**
     * 更新房间的状态到正常
     * @param roomId 房间id
     * @return 是否更新成功
     */
    int updateRoomStatusToNormal(int roomId) throws SQLException;
}
